/*
 * Copyright 2018-2019 Expedia Group, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.expedia.adaptivealerting.anomdetect.util;

import lombok.experimental.UtilityClass;

import java.io.PrintWriter;
import java.io.StringWriter;

@UtilityClass
public class ErrorUtil {

    public static String fullExceptionDetails(Exception e) {
        return stackTraceString(e);
    }

    public static String singleLineExceptionTrace(Exception e) {
        String m = e.toString();
        String stackTraceString = stackTraceString(e);
        String[] stackTraceLines = stackTraceString.split("\n");
        String lastMethod = stackTraceLines.length == 0 ? "" : stackTraceLines[1].replace("\t", "");
        return String.format("%s (%s)", m, lastMethod);
    }

    public static String stackTraceString(Exception e) {
        StringWriter stackTrace = new StringWriter();
        try (PrintWriter pw = new PrintWriter(stackTrace)) {
            e.printStackTrace(pw);
            return stackTrace.toString();
        }
    }
}
